package com.atguigu.gmall.product.controller;

import com.atguigu.gmall.common.cache.BloomType;
import com.atguigu.gmall.common.constant.RedisConst;
import com.atguigu.gmall.common.result.Result;
import com.atguigu.gmall.product.service.SkuInfoService;
import org.redisson.api.RBloomFilter;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

/**
 * @author dyq
 * @description
 * @data 26/1/2022
 */
@RestController
@RequestMapping("/admin/product")
public class BloomFilterAddDataController {

    @Qualifier(BloomType.SKU)
    @Autowired
    RBloomFilter<Object> skuFilter;

    @Autowired
    SkuInfoService skuInfoService;

    /**
     * 代码重建
     * 删除旧布隆，重新初始化布隆过滤器，添加新布隆,每一个业务用自己的布隆
     * @return
     */
    @GetMapping("/add/bloom/sku")
    public Result bloomAddAll(){//加定时任务，每隔7天的晚上3：30，执行一次这个方法
        //删除旧布隆，redis中的数据就删除了
        skuFilter.delete();
        //1、（可以这么做）服务器时间判断，不是晚上不允许重置
        skuFilter.tryInit(1000000L,0.001);
        List<Long> skuIds = skuInfoService.getAllId();
        //添加新布隆
        skuIds.stream().forEach(item -> skuFilter.add(RedisConst.SKUKEY_PREFIX + item + RedisConst.SKUKEY_SUFFIX));
        return Result.ok();
    }
}
